export default {
  namespaced:true, // 开启命名空间
  // 数据存储在state中
  state:()=>({
    // 购物车的数组
       // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    cart:JSON.parse(uni.getStorageSync('cart') || '[]')
  }),
    // 模块的 mutations 方法
  mutations:{
    // state是cart中的数据 goods是新传过来的数据
    addToCart(state,goods){
      // 查找数组中存放的数据有无传过来的数据
    const findResult= state.cart.find(x=>x.goods_id===goods.goods_id)
    if(!findResult){
      state.cart.push(goods)
    }else{
      findResult.goods_count++
    }
   // 通过 commit 方法，调用 m_cart 命名空间下的 saveToStorage 方法
    this.commit('m_cart/saveToStorage')
    },
    saveToStorage(state){
      uni.setStorageSync('cart',JSON.stringify(state.cart))
    },
    // 更新购物车中商品的勾选状态
    updateGoodsState(state, goods) {
      // 根据 goods_id 查询购物车中对应商品的信息对象
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      // 有对应的商品信息对象
      if (findResult) {
        // 更新对应商品的勾选状态
        findResult.goods_state = goods.goods_state
        // 持久化存储到本地
        this.commit('m_cart/saveToStorage')
      }
    },
    // 更新商品数量
    UpdateGoodsCount(state,goods){
       const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
       if(findResult) {
           // 更新对应商品的数量
           findResult.goods_count = goods.goods_count
           // 持久化存储到本地
           this.commit('m_cart/saveToStorage')
         }
    },
    // 根据 Id 从购物车中删除对应的商品信息
    removeGoodsById(state, goods_id) {
      // 调用数组的 filter 方法进行过滤
      state.cart = state.cart.filter(x => x.goods_id !== goods_id)
      // 持久化存储到本地
      this.commit('m_cart/saveToStorage')
    },
    updateAllGoodsState(state,newState){
      // 实现全选按钮得功能
      state.cart.forEach(x=>x.goods_state=newState)
      // 持久化存储到本地
      this.commit('m_cart/saveToStorage')
    }
  },
  // 模块的 getters 属性
  getters:{
       // 统计购物车中商品的总数量
   total(state) {
   //    let c = 0
   //    // 循环统计商品的数量，累加到变量 c 中
   //    state.cart.forEach(goods => c += goods.goods_count)
   //    return c
      return state.cart.reduce((total,item)=>{return total+=item.goods_count},0)
   },
   // 勾选的商品总数
   checkedCount(state){
     return state.cart.filter(x=>x.goods_state).reduce((total, item) => total += item.goods_count, 0)
   },
   // 已勾选得商品总价
   checkedGoodsAmout(state){
     // 选择勾选得商品
     return state.cart.filter(x=>x.goods_state)
     // 得到循环得数量和单价并相乘
     .reduce((total, item) =>total+=item.goods_count*item.goods_price,0)
     // 结果保留2位小数
     .toFixed(2)
     // state.cart.filter(x => x.goods_state)
     //                    .reduce((total, item) => total += item.goods_count * item.goods_price, 0)
     //                    .toFixed(2)
   }
  }
}
